package com.xk.androiddemo.utils;

import android.graphics.Color;

import com.github.mikephil.charting.charts.PieChart;
import com.github.mikephil.charting.components.Description;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.data.PieData;
import com.github.mikephil.charting.data.PieDataSet;
import com.github.mikephil.charting.data.PieEntry;
import com.github.mikephil.charting.formatter.PercentFormatter;
import com.github.mikephil.charting.utils.ColorTemplate;
import com.xk.androiddemo.model.MonitorDataItem;
import com.xk.androiddemo.model.MonitoringData;

import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class UIUtils {

    public static void showPieChart(PieChart pieChart, List<PieEntry> pieList) {
        PieDataSet dataSet = new PieDataSet(pieList,"Label");

        // 设置颜色list，让不同的块显示不同颜色，下面是我觉得不错的颜色集合，比较亮
        ArrayList<Integer> colors = new ArrayList<Integer>();
        int[] MATERIAL_COLORS = {
                Color.rgb(200, 172, 255)
        };
        for (int c : MATERIAL_COLORS) {
            colors.add(c);
        }
        for (int c : ColorTemplate.VORDIPLOM_COLORS) {
            colors.add(c);
        }
        dataSet.setColors(colors);
        PieData pieData = new PieData(dataSet);

        Description description = new Description();
        description.setEnabled(false);
        pieChart.setDescription(description);

        // 不显示图例
        Legend legend = pieChart.getLegend();
        legend.setEnabled(false);

        //是否绘制PieChart内部中心文本
        pieChart.setDrawCenterText(true);
        pieChart.setCenterText("45%");
        // 绘制内容value，设置字体颜色大小
        pieData.setDrawValues(false);
        pieData.setValueFormatter(new PercentFormatter());

        pieChart.setData(pieData);
        // 更新 piechart 视图
        pieChart.postInvalidate();
    }

    public static MonitoringData generateMockMonitoringData() {
        Random random = new Random();

        // 创建饼图数据条目，使用随机值
        DecimalFormat decimalFormat = new DecimalFormat("#.00");
        String gasPressureTime = generateRandomTime(); // 假设有一个方法来生成随机时间
        double gasPressureValue =  Double.parseDouble(decimalFormat.format(random.nextDouble() * 100.0));
        double temperatureValue = random.nextInt(30) + 40; // 温度值在40到69之间
        String flowRateValue = generateRandomFlowRate(); // 假设有一个方法来生成随机流量值

        return new MonitoringData(
                gasPressureTime, // 燃气压力时间
                gasPressureValue, // 燃气压力值
                temperatureValue, // 温度值
                flowRateValue);
    }

    // 假设的方法，用于生成随机时间字符串
    private static String generateRandomTime() {
        // 实现逻辑来生成随机时间字符串，例如使用SimpleDateFormat和Calendar
        // 这里省略具体实现
        return "随机时间";
    }
    public static MonitorDataItem generateRandomDataItem() {
        Random random = new Random();
        // 设置DecimalFormat来保留两位小数
        DecimalFormat decimalFormat = new DecimalFormat("#.00");
        // 生成随机数据并格式化
        double gasPressure = Double.parseDouble(decimalFormat.format(random.nextDouble() * 100.0));
        double flowRate = Double.parseDouble(decimalFormat.format(random.nextDouble() * 50.0));
        double valveOpening = Double.parseDouble(decimalFormat.format(random.nextDouble() * 100.0));
        double liquidLevel = random.nextDouble(); // 这个通常不需要格式化，因为它表示比例（0到1之间）
        double current = Double.parseDouble(decimalFormat.format(random.nextDouble() * 10.0));
        double voltage = Double.parseDouble(decimalFormat.format(random.nextDouble() * 400.0 + 100.0));
        boolean valvePosition =  random.nextBoolean();
        boolean alarmSet = random.nextBoolean(); // 布尔值也不需要格式化

        return new MonitorDataItem(gasPressure, flowRate, valvePosition, valveOpening,
                liquidLevel, current, voltage, alarmSet);
}

    // 假设的方法，用于生成随机流量值字符串
    private static String generateRandomFlowRate() {
        // 实现逻辑来生成随机流量值字符串，例如"xxm³/h"
        // 这里省略具体实现
        return randomFlowRateValue() + "m³/h";
    }

    // 假设的方法，用于生成随机的流量数值
    private static int randomFlowRateValue() {
        Random random = new Random();
        return random.nextInt(200) + 50; // 假设流量值在50到249之间
    }


}
